package com.form;

import com.util.AESUtil;
import com.主程序;

import javax.swing.*;
import java.awt.event.*;

public class 主页 {

    public JFrame frame;
    public JPanel panel;
    public JTabbedPane tabPane;
    private JPanel 加密tab;
    private JPanel 解密tab;
    public JPanel 列表tab;
    private JLabel label1;
    private JTextField 输入应用的网站或软件TextField;
    private JLabel label2;
    private JLabel label4;
    private JTextArea 加密后TextArea;
    private JButton 加密Button;
    private JPasswordField 输入密码PasswordField;
    private JLabel label3;
    private JPasswordField 确认密码PasswordField;
    private JLabel label5;
    private JTextArea 输入需要解密的密文TextArea;
    private JButton 解密Button;
    private JTextField 解密后TextField;
    private JLabel label6;

    public 主页() {
        确认密码PasswordField.addFocusListener(new FocusAdapter() {
            @Override
            public void focusLost(FocusEvent e) {
                super.focusLost(e);
                String 密码 = new String(输入密码PasswordField.getPassword());
                String 确认密码 = new String(确认密码PasswordField.getPassword());
                if(!密码.equals(确认密码)){
                    AESUtil.tips("两次输入的密码不一致！");
                }
            }
        });

        加密Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String 应用 = 输入应用的网站或软件TextField.getText();
                String 密码 = new String(输入密码PasswordField.getPassword());
                String 确认密码 = new String(确认密码PasswordField.getPassword());
                if (AESUtil.isNull(应用) || AESUtil.isNull(密码) || AESUtil.isNull(确认密码)){
                    AESUtil.tips("上面三个输入框为必填项！");
                    return;
                }
                if(!密码.equals(确认密码)){
                    AESUtil.tips("两次输入的密码不一致！");
                    return;
                }
                //String 保存位置 = System.getProperty("user.dir")+"/加密密码.txt";// 打包用的路径，和jar是同级
                String 保存位置 = System.getProperty("user.dir")+"/密码管理器/加密密码.txt";
                String 密码加密 = AESUtil.encrypt(密码,false); // 先使用随机密钥加密密码
                密码加密 = AESUtil.密钥 + AESUtil.separate + AESUtil.偏移量 + AESUtil.separate + 密码加密;
                // 再将 密钥、偏移量、加密的密码拼接在一起，通过默认密钥再进行一次加密，得到最终密文
                String 最终密文 = AESUtil.encrypt(密码加密,true).replaceAll("\r\n","");
                加密后TextArea.setText(最终密文);
                String 输出内容 = 应用 + "：" + 最终密文;
                AESUtil.写入内容(保存位置,应用,输出内容);
            }
        });

        解密Button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                主程序.登录Form(2); // 点击界面按钮，以模态框的形式显示登录窗口，校验登录密码。
                String text = 输入需要解密的密文TextArea.getText();
                if (AESUtil.isNotBlank(text)){
                    String 密钥 = AESUtil.登录密码 + AESUtil.默认密钥.substring(0,16 - AESUtil.登录密码.length());
                    String 偏移量 = AESUtil.登录密码 + AESUtil.默认偏移量.substring(0,16 - AESUtil.登录密码.length());
                    //System.out.println("解密密钥和偏移量："+密钥+"\t"+偏移量);
                    String 密文 = AESUtil.decrypt(text,密钥,偏移量);
                    if (AESUtil.isNull(密文)){
                        AESUtil.tips("解密失败，请检查密文是否正确！");
                        return;
                    }
                    String[] split = 密文.split(AESUtil.separate);
                    String 密码 = AESUtil.decrypt(split[2],split[0],split[1]);
                    if (AESUtil.isNull(密文)){
                        AESUtil.tips("解密失败，请检查密文是否正确！");
                        return;
                    }
                    解密后TextField.setText(密码);
                }else {
                    AESUtil.tips("请输入需要解密的密文！");
                }
            }
        });
    }

}
